package gui.standard.form;

import java.sql.SQLException;

import javax.swing.JButton;
import javax.swing.JLabel;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.JTextField;

import model.tablemodel.PoslovnaGodinaTableModel;
import net.miginfocom.swing.MigLayout;
import util.components.JDigitsTextField;
import util.components.JLimitedTextField;
import actions.standard.form.OtvoriPocetnoStanjeAction;
import actions.standard.form.ZoomFormAction;

public class PoslovnaGodinaForm extends StandardForm {

	private static final long serialVersionUID = 1L;
	private JLimitedTextField tfSifraPreduzeca;
	private JDigitsTextField tfPoslovnaGodina;
	private JTextField tfDatumPocetka;
	private JTextField tfDatumKraja;

	private JButton bPreduzeceZoom;
	private JButton btnOtvoriPocetnoStanje;
	
	public PoslovnaGodinaForm() {

	}
	
	@Override
	public void init(){
		
		super.init();
		
		tfSifraPreduzeca = new JLimitedTextField(12, 12, true);
		tfPoslovnaGodina = new JDigitsTextField(4, 4, false, false);
		tfDatumPocetka = new JTextField(12);
		tfDatumKraja = new JTextField(12);
		
		setTitle("Poslovna godina");
		
		tableModel = new PoslovnaGodinaTableModel(
				new String[] { "Sifra preduzeca", "Poslovna godina",
						"Datum pocetka", "Datum kraja" }, 0);

		tblGrid.setModel(tableModel);
		
		bPreduzeceZoom = new JButton(new ZoomFormAction(this,
				new PreduzeceForm()));
		
		btnOtvoriPocetnoStanje = new JButton(new OtvoriPocetnoStanjeAction(this));
		
		children.add(new MagacinskaKarticaForm());
		children.add(new PopisniDokumentForm());
		children.add(new PrometniDokumentForm());
		
		buttonsPanel.add(btnOtvoriPocetnoStanje);

		JPanel bottomPanel = new JPanel();
		bottomPanel.setLayout(new MigLayout("fillx"));
		JPanel dataPanel = new JPanel();
		dataPanel.setLayout(new MigLayout("gapx 15px"));

		JLabel lblSifraPreduzeca = new JLabel("Sifra preduzeca:");
		JLabel lblPoslovnaGodina = new JLabel("Poslovna godina:");
		JLabel lblDatumPocetka = new JLabel("Datum pocetka:");
		JLabel lblDatumKraja = new JLabel("Datum kraja:");

		dataPanel.add(lblSifraPreduzeca);
		dataPanel.add(tfSifraPreduzeca);
		dataPanel.add(bPreduzeceZoom, "wrap");
		dataPanel.add(lblPoslovnaGodina);
		dataPanel.add(tfPoslovnaGodina, "pushx");
		dataPanel.add(lblDatumPocetka);
		dataPanel.add(tfDatumPocetka, "wrap");
		dataPanel.add(lblDatumKraja);
		dataPanel.add(tfDatumKraja, "pushx");
		bottomPanel.add(dataPanel);

		bottomPanel.add(buttonsPanel, "dock east");

		add(bottomPanel, "grow, wrap");
	}

	@Override
	public void sync() {
		// TODO Auto-generated method stub
		int index = tblGrid.getSelectedRow();
		if (index < 0) {
			tfSifraPreduzeca.setText("");
			tfPoslovnaGodina.setText("");
			tfDatumPocetka.setText("");
			tfDatumKraja.setText("");
			return;
		}
		String sifraPreduzeca = (String) tableModel.getValueAt(index, 0);
		String poslovnaGodina = (String) tableModel.getValueAt(index, 1);
		String datumPocetka = (String) tableModel.getValueAt(index, 2);
		String datumKraja = (String) tableModel.getValueAt(index, 3);

		tfSifraPreduzeca.setText(sifraPreduzeca);
		tfPoslovnaGodina.setText(poslovnaGodina);
		tfDatumPocetka.setText(datumPocetka);
		tfDatumKraja.setText(datumKraja);

		setMode(StandardForm.MODE_EDIT);

	}

	@Override
	public void addRow() {
		// TODO Auto-generated method stub
		String sifraPreduzeca = tfSifraPreduzeca.getText().trim();
		String poslovnaGodina = tfPoslovnaGodina.getText().trim();
		String datumPocetka = tfDatumPocetka.getText().trim();
		String datumKraja = tfDatumKraja.getText().trim();
		try {
			int index = tableModel.insertRow(new String[] { sifraPreduzeca,
					poslovnaGodina, datumPocetka, datumKraja });
			tblGrid.setRowSelectionInterval(index, index);
			setMode(MODE_ADD);
		} catch (SQLException ex) {
			JOptionPane.showMessageDialog(this, ex.getMessage(), "Greska",
					JOptionPane.ERROR_MESSAGE);
		}
	}

	@Override
	public void searchRow() {
		// TODO Auto-generated method stub
		String sifraPreduzeca = tfSifraPreduzeca.getText().trim();
		String poslovnaGodina = tfPoslovnaGodina.getText().trim();
		String datumPocetka = tfDatumPocetka.getText().trim();
		String datumKraja = tfDatumKraja.getText().trim();
		try {
			tableModel.searchRows(new String[] { sifraPreduzeca,
					poslovnaGodina, datumPocetka, datumKraja });
		} catch (SQLException ex) {
			JOptionPane.showMessageDialog(this, ex.getMessage(), "Greska",
					JOptionPane.ERROR_MESSAGE);
		}
	}

	@Override
	public void editRow() {
		// TODO Auto-generated method stub
		String sifraPreduzeca = tfSifraPreduzeca.getText().trim();
		String poslovnaGodina = tfPoslovnaGodina.getText().trim();
		String datumPocetka = tfDatumPocetka.getText().trim();
		String datumKraja = tfDatumKraja.getText().trim();
		try {
			int index = tableModel.editRow(new String[] { sifraPreduzeca,
					poslovnaGodina, datumPocetka, datumKraja },
					tblGrid.getSelectedRow());
			tblGrid.setRowSelectionInterval(index, index);
		} catch (SQLException ex) {
			JOptionPane.showMessageDialog(this, ex.getMessage(), "Greska",
					JOptionPane.ERROR_MESSAGE);
		}
	}

	@Override
	public void setMode(int mode) {
		super.setMode(mode);

		if (mode != StandardForm.MODE_ADD)
			return;

		tfSifraPreduzeca.setText("");
		tfPoslovnaGodina.setText("");
		tfDatumPocetka.setText("");
		tfDatumKraja.setText("");
	}
	
	public void otvoriPocetnoStanje() {
		try {
			((PoslovnaGodinaTableModel)tableModel).otvoriPocetnoStanje(tblGrid.getSelectedRow());
		} catch (SQLException ex) {
			JOptionPane.showMessageDialog(this, ex.getMessage(), "Greska",
					JOptionPane.ERROR_MESSAGE);
		}
	}

	@Override
	public String[] getSelectedRowKeys() {
		// TODO Auto-generated method stub
		return new String[]{tfSifraPreduzeca.getText().trim(), tfPoslovnaGodina.getText().trim()};
	}

	@Override
	public void getZoomedCol(String[] keys, StandardForm form) {
		// TODO Auto-generated method stub
		if(form instanceof PreduzeceForm)
			tfSifraPreduzeca.setText(keys[0]);
	}

	@Override
	public String[] getSelectedRowNextKeys(int index) {
		// TODO Auto-generated method stub
		String[] retval = new String[]{};
		
		switch(index){
		case 0:{
			retval = new String[]{tfSifraPreduzeca.getText().trim(), "", "" ,"", "", tfPoslovnaGodina.getText().trim(),
					"", "", "", "", "", "", "", "", "", "", ""};
			break;
		}
		case 1:{
			retval = new String[]{"", tfPoslovnaGodina.getText().trim(), tfSifraPreduzeca.getText().trim(), "", "", "", "", ""};
			break;
		}
		case 2:{
			retval = new String[]{tfPoslovnaGodina.getText().trim(), tfSifraPreduzeca.getText().trim(), "", "", "", "", "", "", 
					"", "", "", "", ""};
			break;
		}
		}
		
		return retval;
	}

}
